package cn.tpshion.devops.node;

import cn.tpshion.devops.common.enums.NodeType;
import cn.tpshion.devops.handle.SSEHandle;
import cn.tpshion.devops.node.support.NodeContext;

import javax.annotation.Resource;

public abstract class Node<T> {

    @Resource
    protected SSEHandle sseHandle;

    /**
     * 节点类型
     */
    public abstract NodeType nodeType();

    /**
     * 获取节点类型
     */
    public String getType(){
        return nodeType().getType();
    }

    /**
     * 获取节点名称
     */
    public String getName(){
        return nodeType().getName();
    }

    /**
     * 执行节点
     * @param nodeContext
     */
    public abstract void handle(NodeContext nodeContext) throws Exception;

    /**
     * 获取节点数据
     * @param nodeContext
     * @return
     */
    protected abstract T getData(NodeContext nodeContext);
}
